home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / unixSyscall / semop.c < prev    next >
C/C++ Source or Header  |  1990-03-15  |  3KB  |  130 lines

  1. /* 
  2.  * semop.c --
  3.  *
  4.  *    Procedures to map from Unix semaphore system calls to Sprite.
  5.  *
  6.  * Copyright 1989 Regents of the University of California
  7.  * All rights reserved.
  8.  */
  9.  
  10. #ifndef lint
  11. static char rcsid[] = "$Header: /sprite/src/lib/c/unixSyscall/RCS/mmap.c,v 1.1 90/01/11 14:34:37 shirriff Exp $ SPRITE (Berkeley)";
  12. #endif not lint
  13.  
  14. #include "sprite.h"
  15.  
  16. #include <sys/types.h>
  17. #include <sys/ipc.h>
  18. #include <sys/sem.h>
  19.  
  20. #include "compatInt.h"
  21.  
  22.  
  23. /*
  24.  *----------------------------------------------------------------------
  25.  *
  26.  * semop --
  27.  *
  28.  *    Procedure to map from Unix semop system call to Sprite Sync_Semop.
  29.  *
  30.  * Results:
  31.  *    Returns semaphore value.
  32.  *    Returns -1 if an error occurs.
  33.  *
  34.  * Side effects:
  35.  *    May modify a semaphore.
  36.  *
  37.  *----------------------------------------------------------------------
  38.  */
  39.  
  40. int
  41. semop(semid, sops, nsops)
  42.     int            semid;    /* Semaphore specifier. */
  43.     struct sembuf    *sops;    /* Array of semaphore operations. */
  44.     int            nsops;    /* Number of semaphore operations.  */
  45. {
  46.     ReturnStatus status;    /* Result returned by Sync_Semop. */
  47.     int semVal;            /* Returned semaphore value. */
  48.  
  49.     status = Sync_Semop(semid, sops, nsops, &semVal);
  50.     if (status != SUCCESS) {
  51.     errno = Compat_MapCode(status);
  52.     return(-1);
  53.     } else {
  54.     return (semVal);
  55.     }
  56. }
  57.  
  58.  
  59. /*
  60.  *----------------------------------------------------------------------
  61.  *
  62.  * semget --
  63.  *
  64.  *    Procedure to map from Unix semget system call to Sprite Sync_Semget.
  65.  *
  66.  * Results:
  67.  *    Returns semaphore identifier.
  68.  *    Returns -1 if an error occurs.
  69.  *
  70.  * Side effects:
  71.  *    May create semaphore data structures.
  72.  *
  73.  *----------------------------------------------------------------------
  74.  */
  75.  
  76. int
  77. semget(key, nsems, semflag)
  78.     key_t    key;        /* Semaphore key. */
  79.     int     nsems;        /* Number of semaphores. */
  80.     int        semflag;    /* Creation flag.  */
  81. {
  82.     ReturnStatus status;    /* Result returned by Sync_Semget. */
  83.     int semID;            /* Identifier returned by Sync_Semget. */
  84.  
  85.     status = Sync_Semget((long)key, nsems, semflag, &semID);
  86.     if (status != SUCCESS) {
  87.     errno = Compat_MapCode(status);
  88.     return(-1);
  89.     } else {
  90.     return (semID);
  91.     }
  92. }
  93.  
  94.  
  95. /*
  96.  *----------------------------------------------------------------------
  97.  *
  98.  * semctl --
  99.  *
  100.  *    Procedure to map from Unix semctl system call to Sprite Sync_Semctl.
  101.  *
  102.  * Results:
  103.  *    Returns function-dependent value.
  104.  *    Returns -1 if an error occurs.
  105.  *
  106.  * Side effects:
  107.  *    May modify semaphores.
  108.  *
  109.  *----------------------------------------------------------------------
  110.  */
  111.  
  112. int
  113. semctl(semid, semnum, cmd, arg)
  114.     int            semid;        /* Semaphore specifier. */
  115.     int            semnum;        /* Semaphore number. */
  116.     int            cmd;        /* Semaphore command. */
  117.     union semun        arg;        /* Command argument. */
  118. {
  119.     int        result;        /* Result returned by Sync_Semctl. */
  120.     ReturnStatus status;    /* Status returned by Sync_Semctl. */
  121.  
  122.     status = Sync_Semctl(semid, semnum, cmd, arg, &result);
  123.     if (status != SUCCESS) {
  124.     errno = Compat_MapCode(status);
  125.     return(-1);
  126.     } else {
  127.     return (result);
  128.     }
  129. }
  130.